草庐IT

TCP 与可靠的 UDP

全部标签

c# - 仅从特定适配器(例如 192.168.101.1)发送 UDP 广播(255.255.255.255);在 Windows 上

适用于WindowsXP或更高版本的解决方案。最好使用C#或C++。我们不想使用子网定向广播(例如192.168.101.255)进行广播,因为我们尝试联系的设备没有对此做出响应。相反,我们希望能够仅从特定NIC/IP地址发送目标为255.255.255.255的UDP数据报,这样广播就不会在其他NIC上发送。这意味着我们必须绕过IP堆栈,这就是问题所在。我们如何绕过Windows上的IP堆栈,仅从特定的NIC/MAC地址发送符合UDP/IP的数据报? 最佳答案 只需将套接字bind()到所需的接口(interface)而不是使用I

c++ - tcp 连接上的 recv() 问题

我正在用C语言在Windows上模拟TCP通信。我有发送者和接收者在通信。发送方向接收方发送特定大小的数据包。接收方获取它们并将收到的每个数据包的ACK发送回发送方。如果发送方没有收到特定的数据包(它们在数据包内的header中编号),它会再次将数据包发送给接收方。这是接收方的getPacket函数://getthenextpacketfromthesocket.setthepacketSizeto-1//ifit'sthefirstpacket.//return:totalbytesread//return:0ifsockethasshutdownonsenderside,-1err

c++ - POSIX 套接字 VS Web 套接字 VS Windows TCP/IP 套接字

我是网络编程的新手,对WebSockets感到困惑这似乎是一项相当新的技术并且POSIXSocketProgramming已经存在了几十年,WindowsTCP/IPSocketC++.它们到底有什么区别???,在我看来,这三个都与客户端和服务器之间的所有套接字连接相同。谁能给我解释一下,谢谢!!! 最佳答案 C套接字API是用于创建基于流的套接字(TCP套接字、UNIX域套接字)和基于数据报的套接字(UDP套接字)的低级机制。为此,POSIXAPI和WindowsAPI略有不同(有时以微妙的方式……Windows具有许多POSIX

c++ - 如何获取命名管道中要(可靠地)读取的数据长度?

我创建了一个带有以下标志的命名管道:PIPE_ACCESS_DUPLEX-双方读/写访问权限PIPE_TYPE_MESSAGE-已读消息类型PIPE_WAIT-阻塞读\写我从服务器端调用ConnectNamedPipe并等待客户端连接。我从客户端调用CallNamedPipe连接服务器并写入长度为N的数据。在服务器端:客户端连接后,PeekNamedPipe被调用以获取分配给读取数据缓冲区的缓冲区的长度。获得确切的缓冲区大小(N)后,我分配长度为N的缓冲区并调用ReadFile从Pipe读取数据。问题:问题是——在单处理器机器上,PeekNamedPipeAPI将缓冲区长度返回为0。因

S7-1200和1500PLC与条码枪建立TCP_IP通信的具体方法示例

S7-1200和1500PLC与条码枪建立TCP_IP通信的具体方法示例今天和大家分享西门子S7-1200和1500PLC如何获取条码枪的扫描数据,这种案例中一般PLC作为TCP/IP的客户端(只接收数据,不发送数据),条码枪作为TCP/IP的服务器。如下图所示,在指令—通信—开放式用户通信中可以找到相关的通信指令,这里可以看到有TRCV_C和TRCV两个接收指令,这两者的区别是TRCV_C是建立连接并接收数据集成在一起的,而TRCV是没有建立连接,只负责接收数据的。我们这里使用TRCV_C来举例说明:如下图所示,我们拖拽TRCV_C指令到OB1中,此时系统会自动生成一个背景DB块,点击确定即

linux - KVM Windows 2008 RC2 客户机上不可靠的 QueryPerformanceCounter

我在ubuntu12.04x64主机上运行KVMWindows2008RC2x64guest时遇到了一些问题。具体来说,与时钟时间相比,Win32调用QueryPerformanceCounter似乎会周期性地产生不可靠的结果。我正在运行与此类似的循环:autozero=tbb::tick_count::now();while(true){std::cout上面,tbb::tick_count是对QueryPerformanceCounter的精简包装,而datetime::now()使用系统时钟。周期性地,比如说至少每3分钟一次,增量约为42秒。系统时钟总是非常准确。关于可能导致此问

windows - 在 Windows 10 中发送常规 UDP 数据包

我目前在这里有一个让我发疯的效果。我在家里的本地网络中有一个Windows10PC系统(典型的192.168.178.X网络,使用Fritzbox作为DNS和网关)一切运行良好。WindowsPC可以连接到互联网,我可以在互联网上浏览、玩游戏等。现在我正在玩一个通过WLAN连接到Fritzbox的小设备(ESP8266和一个OLED),而我的WindowsPC通过电缆连接。设备应接收UDP消息(无广播,直接)并将其显示在其OLED上。我对设备进行了编程并启动它,然后使用商店中的一些UDP测试器应用程序通过我的android手机(也在通过无线网络中)进行测试。每个UDP数据包都被完美地接

windows - 如何在 Windows XP 中监视 UDP 缓冲区

我正在尝试优化基于UDP的大型系统中的通信。通过优化,我的意思是尽量减少数据包的丢失。(是的,我知道UDP的固有局限性,不建议使用其他协议(protocol))我们有几个.exe,每个都有几个线程,并使用setsockoptwithSO_SNDBUF&SO_RCVBUFtoincreasetobufers.我们经历过为许多套接字设置非常大的缓冲区会降低整体性能(更多的数据包丢失)但是如何监控这些增加的缓冲区大小的影响呢?.特别是在接收端,我想看看是否有任何端口收到的消息由于缺少缓冲区而被丢弃。请建议如何做到这一点,(用户或内核模式下的Windbg,特殊程序,自知之明)编辑:@EdChu

Windows 7 阻止 UDP 广播消息

我在我的Windows7机器上运行一个客户端应用程序,它向本地子网上的另一台服务器机器发送一条UDP消息,然后服务器回复一条目标为“192.168.1.255”的广播UDP消息。奇怪的是,我在Windows上的客户端应用程序无法获取消息。我试过让服务器直接向我的windows机器'192.168.1.8'的ip发送单播消息,然后客户端就可以得到它。我使用WireShark跟踪消息,我可以看到发送到“192.168.1.255”的IP数据包,但我的应用程序无法获取它。所以我相信Windows7会阻止子网络中的广播消息。我关闭了windows防火墙,但还是不行。我几乎可以肯定这是Windo

windows - 监听 UDP 多播数据包

我的AutoIt脚本应该接收发送到239.255.250.250:9131的UDP多播数据包.但它不起作用,我看不到指定UDPmulticastaddress的选项对于UDPBind().UDPBind()在下面的代码中返回error10049(invalidaddress):UDPStartup()UDPBind("239.255.250.250",9131)While1$msg=UDPRecv($recv,512)If$msg""ThenConsoleWrite($msg)EndIfSleep(100)WEnd如何监听UDP多播包? 最佳答案